package com.cskaoyan.javase.oop1._6constructor;

/**
 * this关键字在构造器中的用途:
 *      1.可以用来访问类中的成员变量和方法，但除了用来赋值，这方面尽量不要做其它用途。比如调用方法
 *      补充: 构造器的作用就是赋值,一般来说(绝大多数情况)都是自动生成即可,不建议手写.
 *      如果构造器中确有需求,写一些业务逻辑的代码,建议尽量保证构造器的简洁
 *      提取出方法,这个方法一般叫"init"然后在构造器中调用
 *
 *      2.在构造器中,this还有一个很重要的功能:
 *          在构造器中,表示调用本类中的其他构造器
 *          语法:
 *          this(实参);
 *          根据实参的不同,调用不同的构造器
 *          细节:
 *              a.this在构造器中表示调用构造器时,必须在构造器代码的第一行
 *              b.所以,this在表示调用构造器时,只能用一次,而且必须在首行
 *
 * 注意:
 *      在一次new对象的过程中,显式赋值最多执行一次
 *      但是构造器因为存在this关键字,一次new对象,也可能调用多个构造器
 *
 * @since 10:56
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo3 {
    public static void main(String[] args) {
        Cat c = new Cat(2000, "大猫", "旺财");
        System.out.println(c.breed);
    }
}

class Cat {
    double price = 1000;
    String breed;
    String name;


    public Cat(double price) {
        // init();
        this.price = price;
    }

    public Cat(double price, String breed) {
        this.price = price;
        this.breed = breed;
    }

    public Cat(double price, String breed, String name) {
       // Call to 'this()' must be first statement in constructor body
        this(price, breed);
        this.name = name;
    }

    public void init() {
        System.out.println("hello world!");
        System.out.println("hello world!");
        System.out.println("hello world!");
    }

    public void test() {
        // this();
    }
}